#include "Log.hpp"
#include "ThreadPool.hpp"
#include <memory>
#include "Task.hpp"

using namespace LogModule;
using namespace ThreadPoolModule;

int main()
{

    Enable_Console_Log_Strategy();

    int count = 10;
    while (count)
    {
        // 获取单例
        ThreadPool<task_t>::GetInstance()->Enqueue(Download);
        sleep(1);
        count--;
    }

    ThreadPool<task_t>::GetInstance()->Stop();
    ThreadPool<task_t>::GetInstance()->Join();


    // ThreadPool<task_t> *tp = new ThreadPool<task_t>();

    // tp->Start();
    // int count = 10;

    // while(count)
    // {
    //     tp->Enqueue(Download);
    //     sleep(1);
    //     count--;
    // }

    // tp->Stop();
    // tp->Join();

    // tp->Start();

    // sleep(5);

    // tp->Stop();

    // tp->Join();

    // tp.Equeue(t);

    // tp.Stop();

    // 定义基类指针
    // 往显示器上打和往文件里打
    // std::unique_ptr<LogStrategy> strategy = std::make_unique<ConsoleLogStrategy>();
    //  std::unique_ptr<LogStrategy> strategy = std::make_unique<FileLogStrategy>();

    // strategy->SyncLog("hello Log!");

    // 加上这个文件策略就是向文件打入内容，没加就是默认向显示器打内容
    //  logger.EnableFileLogStrategy();

    // //这里operator()  和  operator<<
    // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world!";
    // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world!";
    // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world!";
    // logger(LogLevel::DEBUG, "main.cc", 10) << "hello world!";

    // 这个往显示器上打
    //  Enable_Console_Log_Strategy();
    //  LOG(LogLevel::DEBUG) << "hello world" <<3.14;
    //  LOG(LogLevel::DEBUG) << "hello world" <<3.14;

    // //这个往文件里打
    // Enable_File_Log_Strategy();
    // LOG(LogLevel::DEBUG) << "hello world" <<3.14;
    // LOG(LogLevel::DEBUG) << "hello world" <<3.14;

    return 0;
}
